﻿#define _CRT_SECURE_NO_WARNINGS 1
//描述
//首先输入要输入的整数个数n，然后输入n个整数。输出为n个整数中负数的个数，
//和所有正整数的平均值，结果保留一位小数。
//0即不是正整数，也不是负数，不计入计算。如果没有正数，则平均值为0。
//#include<stdio.h>
//int main()
//{
//	int n = 0, i = 0, arr[10000] = { 0 };
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int count1 = 0, sum = 0;
//	double count2 = 0;
//	for (i = 0; i < n; i++)
//	{
//		if (arr[i] < 0)
//		{
//			count1++;
//		}
//		else if (arr[i] > 0)
//		{
//			sum += arr[i];
//			count2++;
//		}
//
//	}
//	if (sum != 0)
//	{
//		printf("%d %.1f", count1, sum / count2);
//	}
//	else 
//	{
//		printf("%d %.1f", count1, 0);
//	}
//	return 0;
//}


//描述
//有一个长度为 n 的非降序数组，比如[1, 2, 3, 4, 5]，将它进行旋转，
//即把一个数组最开始的若干个元素搬到数组的末尾，变成一个旋转数组，
//比如变成了[3, 4, 5, 1, 2]，或者[4, 5, 1, 2, 3]这样的。
//请问，给定这样一个旋转数组，求数组中的最小值。
// 
//int minNumberInRotateArray(int* rotateArray, int rotateArrayLen) {
//    // write code here
//    if (rotateArrayLen == 0) return 0;
//    int min = rotateArray[0];
//    for (int i = 0; i < rotateArrayLen; i++)
//    {
//        if (min > rotateArray[i])
//            min = rotateArray[i];
//    }
//    return min;
//}

//集合 s 包含从 1 到 n 的整数。不幸的是，因为数据错误，导致集合里面某一个数字复制了成了
//集合里面的另外一个数字的值，导致集合 丢失了一个数字 并且 有一个数字重复 。
//给定一个数组 nums 代表了集合 S 发生错误后的结果。
//请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。

//#include<stdio.h>
//int* findErrorNums(int* nums, int numsSize, int* returnSize) {
//	*returnSize = 2;
//	//遍历nums数组，将其中数据对应的位置1， 哪一位如果已经重置过则意味着数据重复了
//	int* arr = (int*)calloc(numsSize + 1, sizeof(int));//申请numsSize个整形空间，并初始化为0
//	int* ret = (int*)calloc(*returnSize, sizeof(int));//申请2个整形空间，并初始化为0
//	int cur_sum = 0, old_sum = 0;
//	for (int i = 0; i < numsSize; i++) {
//		if (arr[nums[i]] == 1) { //这个数字在上边数组的对应位置已经置过1了，则重复
//			ret[0] = nums[i];//找到重复的数字
//		}
//		arr[nums[i]] = 1; //将标记数组的对应数据位置1
//		old_sum += i + 1; // 1~n的求和
//		cur_sum += nums[i]; //当前数组中的数据求和（多了一个重复的，少了一个丢失的）
//	}
//	ret[1] = old_sum - (cur_sum - ret[0]);//原始总和，减去去掉重复后的当前总和就是丢失的数字
//	free(arr);
//	return ret;
//}


//描述
//小明同学最近开发了一个网站，在用户注册账户的时候，需要设置账户的密码，
//为了加强账户的安全性，小明对密码强度有一定要求：
//1. 密码只能由大写字母，小写字母，数字构成；
//2. 密码不能以数字开头；
//3. 密码中至少出现大写字母，小写字母和数字这三种字符类型中的两种；
//4. 密码长度至少为8
//现在小明受到了n个密码，他想请你写程序判断这些密码中哪些是合适的，哪些是不合法的。

//#include<stdio.h>
//#include<ctype.h>
//#include<assert.h>
//#include<string.h>
//int f(char* arr)
//{	    
//	    assert(arr);
//	    int i = 0;
//		int sz = strlen(arr);
//		if (sz < 8)
//		{
//			return 0;
//		}
//		if (arr[0] >= '0' && arr[0] <= '9')
//		{
//			return 0;
//		}
//		int* count = (int*)calloc(3, sizeof(int));
//		for (i = 0; i < sz; i++)
//		{
//			
//			if (arr[i] >= '0' && arr[i] <= '9')
//			{
//				count[0] = 1;
//			}
//			else if (islower(arr[i]))
//			{
//				count[1] = 1;
//			}
//			else if (isupper(arr[i]))
//			{
//				count[2] = 1;
//			}
//			else
//			{
//				free(count);
//				return 0;
//			}
//		}
//		if ((count[0] + count[1] + count[2] )>= 2)
//		{
//			free(count);
//			return 1;
//		}
//		else
//		{
//			free(count);
//			return 0;
//		}
//
//}
//int main()
//{
//	char arr[101] = { 0 };
//	int n=0;
//	scanf("%d", &n);
//	while (n)
//	{
//		scanf("%s", arr);
//		n--;
//		int x=f(arr);
//		if (x == 1)
//		{
//			printf("YES\n");
//		}
//		else
//		{
//			printf("NO");
//		}
//	}
//	
//	return 0;
//}



//描述
//给定一个长度为 n 的非降序数组和一个非负数整数 k ，要求统计 k 在数组中出现的次数
//int GetNumberOfK(int* nums, int numsLen, int k) {
//    int i = 0, count = 0;
//    for (i = 0; i < numsLen; i++)
//    {
//        if (nums[i] == k)
//        {
//            count++;
//        }
//    }
//    return count;
//
//}


//整数转换。编写一个函数，确定需要改变几个位才能将整数A转成整数B。
//int convertInteger(int A, int B) {
//    unsigned int C = A ^ B;
//    int n = 0;
//    while (C)
//    {
//        C = C & (C - 1);
//        n++;
//    }
//    return n;
//}


//请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。
//如果是，则返回 最大元素的下标 ，否则返回 - 1 。

//int dominantIndex(int* nums, int numsSize) {
//    int i = 0;
//    int m1 = 0, m2 = 0;
//    int x = -1;
//    for (i = 0; i < numsSize; i++)
//    {
//        if (nums[i] > m1)
//        {
//            m2 = m1;
//            m1 = nums[i];
//            x = i;
//        }
//        else if (nums[i] > m2)
//        {
//            m2 = nums[i];
//        }
//
//    }
//    return m1 >= m2 * 2 ? x : -1;
//}



